package com.boss.salary.controller;

import com.boss.api.dto.ApiResultDTO;
import com.boss.common.base.BasicinfoBaseController;
import com.boss.common.entity.PageDTO;
import com.boss.common.util.PageUtils;
import com.boss.framework.dto.PaginationDTO;

import com.boss.salary.entity.PersonExt;
import com.boss.salary.entity.PersonInfo;
import com.boss.salary.service.IPersonExtService;
import org.apache.servicecomb.provider.rest.common.RestSchema;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.ws.rs.core.MediaType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestSchema(schemaId = "personExtController")
@RestController
@RequestMapping(value = "/personExtController", produces = MediaType.APPLICATION_JSON)
public class PersonExtController extends BasicinfoBaseController {

    /**
     * 引入日志框架常量
     */
    private final static Logger logger = LoggerFactory.getLogger(PersonExtController.class);

    @Autowired
    private IPersonExtService service;

    /**
     * 查询 人员信息扩展表数据分页
     * @param offset
     * @param limit
     * @return
     */
    @GetMapping("/queryPersonExtPage")
    public ApiResultDTO queryPersonExtPage(@RequestParam(value = "offset") String offset,
                                                  @RequestParam(value = "limit") String limit) {
        try {
            Map<String, Object> parameters = new HashMap<>(8);
            parameters.put("offset", offset);
            parameters.put("limit", limit);
            PaginationDTO paginationDTO = PageUtils.buildPaginationDTO(parameters);
            PageDTO<PersonExt> pageDTO = service.queryPersonExtPage(paginationDTO);
            return ApiResultDTO.success(pageDTO,null);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return ApiResultDTO.error(ERROR_RSCODE, "查询异常");
        }
    }





    /**
     * 新增 人员信息扩展表数据
     * @param personExt
     * @return
     */
    @PostMapping("/savePersonExt")
    public ApiResultDTO savePersonExt(@RequestBody PersonExt personExt) {
        try {
            service.savePersonExt(personExt);
            return ApiResultDTO.success(null, "保存成功");
        } catch (Exception e) {
            logger.error("新增 人员信息扩展表数据发生异常", e);
            return ApiResultDTO.error(ERROR_RSCODE, "新增 人员信息扩展表数据发生异常");
        }
    }

    /**
     * 更新 人员信息扩展表数据
     * @param personExt
     * @return
     */
    @PostMapping("/updatePersonExt")
    public ApiResultDTO updatePersonExt(@RequestBody PersonExt personExt) {
        try {
            service.updatePersonExt(personExt);
            return ApiResultDTO.success(null, "更新成功");
        } catch (Exception e) {
            logger.error("更新 人员信息扩展表数据发生异常", e);
            return ApiResultDTO.error(ERROR_RSCODE, "更新 人员信息扩展表数据发生异常");
        }
    }

    /**
     * 更新 工资是否停发数据
     * @param personInfo
     * @return
     */
    @PostMapping("/updateIsStopSalary")
    public ApiResultDTO updateIsStopSalary(@RequestBody PersonInfo personInfo) {
        try {
            service.updateIsStopSalary( personInfo);
            return ApiResultDTO.success(null, "更新成功");
        } catch (Exception e) {
            logger.error("更新 是否停发数据发生异常", e);
            return ApiResultDTO.error(ERROR_RSCODE, "更新 是否停发数据发生异常");
        }
    }


    /**
     * 根据区号 单位id 查找单位的人数
     * @param code
     * @param id
     * @return
     */

        @PostMapping("/queryPersons")
    public ApiResultDTO queryPersons(@RequestParam(value = "code") String code,
                                    @RequestParam(value = "id") String id) {
        try {
            List<Map<String, Object>> list= service.queryPersons(code,id) ;
            return ApiResultDTO.success(list,"null");
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return ApiResultDTO.error(ERROR_RSCODE, "查询异常");
        }
    }




    /**
     * 删除 人员信息扩展表数据
     * @param id
     * @return
     */
    @DeleteMapping("/deletePersonExt/{id}")
    public ApiResultDTO deletePersonExt(@PathVariable("id") String id) {
        try {
            service.deletePersonExt(id);
            return ApiResultDTO.success(null, "删除成功");
        } catch (Exception e) {
            logger.error("删除 人员信息扩展表数据发生异常", e);
            return ApiResultDTO.error(ERROR_RSCODE, "删除 人员信息扩展表数据发生异常");
        }
    }



    @PostMapping("/submitVerify")
    public ApiResultDTO submitVerify(@RequestBody PersonExt personExt) {
        return ApiResultDTO.error(ERROR_RSCODE, "");
    }
    @PostMapping("/revokeVerify")
    public ApiResultDTO revokeVerify(@RequestBody PersonExt personExt) {
        return ApiResultDTO.error(ERROR_RSCODE, "");
    }

    /**
     * 机构人员维护修改排序
     * @param tokenid
     * @param personExt
     * @return
     */
    @PostMapping("/updatePersonExtList")
    public ApiResultDTO updatePersonExt( @RequestHeader("tokenid") String tokenid,
                                         @RequestBody List<PersonExt> personExt) {
        try {
            service.updatePersonExts(personExt);
            return ApiResultDTO.success(null, "批量更新成功");
        } catch (Exception e) {
            logger.error("批量更新 人员信息扩展表数据发生异常", e);
            return ApiResultDTO.error(ERROR_RSCODE, "批量更新 人员信息扩展表数据发生异常");
        }
    }
    /**
     * 机构人员维护修改人员编号
     * @param tokenid
     * @param personExt
     * @return
     */
    @PostMapping("/updatePersonnelCodeList")
    public ApiResultDTO updatePersonnelCodeList( @RequestHeader("tokenid") String tokenid,
                                         @RequestBody List<PersonExt> personExt) {
        try {
            service.updatePersonnelCodeList(personExt);
            return ApiResultDTO.success(null, "批量更新成功");
        } catch (Exception e) {
            logger.error("批量更新 人员信息扩展表数据发生异常", e);
            return ApiResultDTO.error(ERROR_RSCODE, "批量更新 人员信息扩展表数据发生异常");
        }
    }
}
